import logging
import traceback
from django.http import JsonResponse
from functools import wraps
from django.conf import settings

logger = logging.getLogger('default')


def render_json(*result):
    """
    格式化返回JSON格式的HttpResponse对象
    Args:
        result: 返回结果，格式为元组。
    Returns:
        JsonResponse: 返回包含结果的JSON格式的HttpResponse对象。
    """
    result_dict = dict(zip(('result', 'data', 'message'), result))
    if result_dict['result']:
        result_dict['code'] = 0
    else:
        result_dict['code'] = 0 if result_dict['result'] else 999999
    return JsonResponse(result_dict)


def except_render(view_func):
    """
    装饰器函数，用于捕获VIEWS并记录异常信息
    Args:
        view_func (function): 需要被装饰的视图函数。
    Returns:
        function: 装饰后的视图函数。
    """

    def wrapped_view(*args, **kwargs):
        try:
            return view_func(*args, **kwargs)
        except Exception as e:
            if settings.DEBUG:
                func_name = view_func.__name__
                logger.error("[%s] %s" % (func_name, str(e)))
                return render_json(False, 'source: %s' % func_name, traceback.format_exc())
            else:
                return render_json(False, '', '执行失败, 请联系管理员')

    return wraps(view_func)(wrapped_view)
